// 引入url
var URL = require('./url.js').url;
// 这个模块里面封装了所有对数据库的常用操作
//不管数据库什么操作，都是先链接数据库 封装此操作
var MongoClient = require('mongodb').MongoClient,
    assert = require('assert');
// 连接数据库的
function __connectDB(callback) {
    MongoClient.connect(URL, function (err, db) {
        assert.equal(null, err);
        callback(err, db)
    });
}
//初始化数据库
init();
function init() {
    __connectDB((err, db) => {
        if (err) {
            console.log(err);
            return;
        }
        db.collection('student').createIndex({
            'cuisine': 1
        }, null, (err, result) => {
            if(err){
                console.log(err);
                return;
            }
            console.log('索引建立成功');
        })
    })
}

// 导出插入的方法  三个参数（集合名称，数据，回调函数)
exports.insetOne = function (collectionName, json, callback) {
    // 数据库调用
    __connectDB(function (err, db) {
        // 这里传入对数据库的增删改查操作
        db.collection(collectionName).insertOne(json, (err, result) => {
            callback(err, result);
            db.close(); //关闭数据库
        })
    })
}
// 查找数据，找到所有数据
exports.find = function (collectionName, json, C, D) {
    var result = [];
    if (arguments.length == 3) {
        // 用户没有传入分页的参数 此时的C就是回调函数了
        var callback = C;
        var skipNumber = 0,
            limit = 0;
    } else if (arguments.length == 4) {
        var callback = D;
        var args = C;
        var skipNumber = args.pageamount * args.page || 0, //应该省略的条数
            limit = args.pageamount || 0, // 数目限制
            sort = args.sort || {}; //排序方式
    } else {
        throw new Error('此方法至少传入三个或四个参数');
        return;
    }
    __connectDB(function (err, db) {
        // 这里传入对数据库的查询操作
        var cursor = db.collection(collectionName).find(json).skip(skipNumber).limit(limit).sort(sort);
        cursor.each((err, doc) => {
            if (err) {
                callback(err, null);
                return;
            }
            if (doc != null) {
                result.push(doc); //放入结果数据
            } else {
                // 遍历结束
                callback(null, result);
                db.close(); //关闭数据库
            }
        })
    })
}
// 删除
exports.delete = (collectionName, json, callback) => {
    // 数据库调用
    __connectDB(function (err, db) {
        // 这里传入对数据库的删除操作
        db.collection(collectionName).deleteMany(json, (err, result) => {
            callback(err, result);
            db.close(); //关闭数据库
        })
    })
}
// 修改数据
exports.updateMany = (collectionName, json1, json2, callback) => {
    // 数据库调用
    __connectDB(function (err, db) {
        // 这里传入对数据库的修改操作
        db.collection(collectionName).updateMany(json1, json2, (err, result) => {
            callback(err, result);
            db.close(); //关闭数据库
        })
    })
}
// 查找总量
exports.getAllData = (collectionName, callback) => {
    // 数据库调用
    __connectDB(function (err, db) {
        // 这里传入对数据库的修改操作
        db.collection(collectionName).find().count({}, (err, count) => {
            callback(err, count);
            db.close(); //关闭数据库
        });
    })
}